
# @target:  hello
# @input: files main.o a.o
# @cmd: gcc -o target_name（目标文件，或者PHONY） input_files（依赖目标）
# 执行顺序是  main.o -> a.o -> hello 
# 变量 
#使用全局变量 函数 不同目录 的方法
 
# target : input1(依赖1) input2(依赖2)  

# $@	表示目标

#  $^ 表示所有的依赖

#  $< 表示第一个依赖

# := 即时赋值

# ?= 延时赋值

# += 附加
BUILD_DIR = output

C_SRC_PATh = src

#C_SRC=$(C_SRC_PATh)/main.c $(C_SRC_PATh)/a.c
#和下面等同
C_SRC=$(wildcard $(C_SRC_PATh)/*.c)


#C_OBJ =$(BUILD_DIR)/main.o $(BUILD_DIR)/a.o
# .c文件 导出.o文件，去掉文件夹前缀
C_OBJ_NODIR =$(notdir $(C_SRC:.c=.o))
#增加BUILD_DIR 文件夹前缀
C_OBJ =$(addprefix $(BUILD_DIR)/, $(C_OBJ_NODIR))


C_INC_PATH = inc

#C_INC = $(C_INC_PATH)/main.h $(C_INC_PATH)/a.h
C_INC = $(wildcard $(C_INC_PATH)/*.h)

TARGET = hello 

.PHONY: all clean test

# # 依赖创建目录和编译 
all: $(BUILD_DIR)/$(TARGET)

# .o -> elf 文件
$(BUILD_DIR)/$(TARGET):$(BUILD_DIR) $(C_OBJ)	 
	gcc -o $@ $(C_OBJ)

#all .c -> .o
$(BUILD_DIR)/%.o:$(C_SRC_PATh)/%.c
	gcc -c $< -I$(C_INC_PATH) -o $@
 
# 创建build目录
$(BUILD_DIR):
	@echo $(C_SRC) $(C_OBJ) $(C_INC)
	mkdir $@
   
clean : 
	rm -rf $(BUILD_DIR) 


SRC1=$(wildcard src/*.c)
OBJS1=$(patsubst %.c, %.o,$(SRC))
OBJS2=$(SRC1:.c=.o)
OBJS3=$(notdir $(OBJS2))
OBJS4=$(addprefix output/, $(OBJS3)) 
test:
	@echo SRC1=$(SRC1) OBJS1=$(OBJS1)  OBJS2=$(OBJS2)   OBJS3=$(OBJS3) OBJS4=$(OBJS4)